home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / graphics / gnuplot / term / gpic.trm < prev    next >
Text File  |  1993-09-15  |  5KB  |  235 lines

  1. /*
  2.  * $Id: gpic.trm%v 3.50 1993/07/09 05:35:24 woo Exp $
  3.  */
  4.  
  5. /* GNUPLOT - gpic.trm -*-C-*- */
  6. /*
  7.  * Copyright (C) 1993   
  8.  *
  9.  * Permission to use, copy, and distribute this software and its
  10.  * documentation for any purpose with or without fee is hereby granted, 
  11.  * provided that the above copyright notice appear in all copies and 
  12.  * that both that copyright notice and this permission notice appear 
  13.  * in supporting documentation.
  14.  *
  15.  * This software  is provided "as is" without express or implied warranty.
  16.  * 
  17.  * This file is included by ../term.c.
  18.  */
  19.  
  20. /*
  21.  * This terminal driver supports:
  22.  *   The GPIC graphics language for groff
  23.  *
  24.  * AUTHOR
  25.  *  Sigfrid Lundberg
  26.  *
  27.  * send your comments or suggestions to (siglun@volterra.teorekol.lu.se).
  28.  * 
  29.  */
  30.  
  31.  
  32. #define GPIC_PTS_PER_INCH (72.27)
  33. #define GPIC_DOTS_PER_INCH (300)    
  34. #define GPIC_UNIT (GPIC_PTS_PER_INCH/GPIC_DOTS_PER_INCH) /* dot size in pt */
  35.  
  36. /* 5 inches wide by 3 inches high (default) */
  37. #define GPIC_XMAX (5*GPIC_DOTS_PER_INCH)  
  38. #define GPIC_YMAX (3*GPIC_DOTS_PER_INCH)  
  39.  
  40. #define GPIC_HTIC (5*GPIC_DOTS_PER_INCH/72)
  41. #define GPIC_VTIC (5*GPIC_DOTS_PER_INCH/72)
  42. #define GPIC_HCHAR (GPIC_DOTS_PER_INCH*53/10/72)
  43. #define GPIC_VCHAR (GPIC_DOTS_PER_INCH*11/72)    
  44. #define GPIC_coord(x) ((float)x)/((float)GPIC_DOTS_PER_INCH)
  45.  
  46. static float GPIC_x, GPIC_y;
  47. static unsigned int GPIC_posx;
  48. static unsigned int GPIC_posy;
  49. static unsigned int GPIC_ltype;
  50. enum JUSTIFY GPIC_justify=LEFT;
  51. static int GPIC_angle=0;
  52.  
  53. /* for DOTS point style */
  54.  
  55. #define GPIC_NUMLINES 6        /* number of linetypes below */
  56. static char *GPIC_lines[] = {
  57.     "thickness 1.0",            /* -2 border */
  58.     "",         /* -1 axes */
  59.     "",            /*  0 solid thin  */
  60.     "dotted",
  61.     "dashed 0.05",            /*  1 solid thick */
  62.     "dashed 0.075",            /*  2 solid Thick */
  63. };
  64.  
  65.  
  66. static int GPIC_type;        /* current line type */
  67. static TBOOLEAN GPIC_inline = FALSE; /* are we in the middle of a line */
  68. static int GPIC_linecount = 0; /* number of points in line so far */
  69.  
  70.  
  71. GPIC_options()
  72. {
  73.   float x,y;
  74.   struct value a;
  75.   extern struct value *const_express();
  76.   extern double real();
  77.  
  78.   GPIC_x=0;
  79.   GPIC_y=0;
  80.  
  81.   if (!END_OF_COMMAND) {
  82.     x = real(const_express(&a));
  83.     if (!END_OF_COMMAND) {
  84.       y = real(const_express(&a));
  85.       GPIC_x = x;
  86.       GPIC_y = y;
  87.     }
  88.   }
  89.  
  90.   sprintf(term_options, "Origin is at (%f,%f)",GPIC_x,GPIC_y);
  91.  
  92. }
  93.  
  94. GPIC_init()
  95. {
  96.   GPIC_linetype(-1);
  97.   fprintf(outfile, ".\\\"GNUPLOT: GROFF picture using the gpic preprocessor\n");
  98. }
  99.  
  100.  
  101. GPIC_scale(xs, ys)
  102.      double xs, ys;            /* scaling factors */
  103. {
  104.   register struct termentry *t = &term_tbl[term];
  105.  
  106.   /* we change the table for use in graphics.c and GPIC_graphics */
  107.   t->xmax = (unsigned int)(GPIC_XMAX * xs);
  108.   t->ymax = (unsigned int)(GPIC_YMAX * ys);
  109.  
  110.   return(TRUE);
  111. }
  112.  
  113.  
  114. GPIC_graphics()
  115. {
  116.   register struct termentry *t = &term_tbl[term];
  117.  
  118.   fprintf(outfile, ".PS %f %f\n",GPIC_coord(t->xmax),
  119.       GPIC_coord(t->ymax));
  120.   fprintf(outfile,"x=%f; y=%f\n",GPIC_x, GPIC_y);
  121. }
  122.  
  123.  
  124. GPIC_text()
  125. {
  126.   GPIC_close_line();
  127.   fprintf(outfile, ".PE\n");
  128. }
  129.  
  130. GPIC_linetype(linetype)
  131.      int linetype;
  132. {
  133.   if (linetype >= GPIC_NUMLINES-2)
  134.     linetype %= (GPIC_NUMLINES-2);
  135.   GPIC_ltype = linetype;
  136. }
  137.  
  138. GPIC_close_line()
  139. {
  140.   if(GPIC_linecount>0) {
  141.     fprintf(outfile,"; reset linewid\n");
  142.     GPIC_linecount = 0;
  143.   }
  144. }
  145.  
  146. GPIC_move(x,y)
  147.      unsigned int x,y;
  148. {
  149.   GPIC_close_line();
  150.   fprintf(outfile,"move to (x+%f,y+%f)\n",GPIC_coord(x),GPIC_coord(y));
  151.   GPIC_linecount = 1;
  152. }
  153.  
  154.  
  155. GPIC_vector(ux,uy)
  156.      unsigned int ux,uy;
  157. {
  158.   if(GPIC_linecount==1) {
  159.     fprintf(outfile,"line %s to (x+%f,y+%f)",
  160.         GPIC_lines[GPIC_ltype+2],
  161.         GPIC_coord(ux),GPIC_coord(uy));
  162.   } else {
  163.     fprintf(outfile," \\\n");
  164.     fprintf(outfile,"   then to (x+%f,y+%f)",GPIC_coord(ux),GPIC_coord(uy));
  165.   }
  166.   GPIC_linecount++;
  167. }
  168.  
  169.  
  170. GPIC_arrow(sx,sy, ex,ey, head)
  171.     int sx,sy, ex,ey;
  172.     TBOOLEAN head;
  173. {
  174.   GPIC_close_line();
  175.   if(head) {
  176.     fprintf(outfile,"arrowhead=7; arrow from x+%f,y+%f to x+%f,y+%f\n",
  177.         GPIC_coord(sx),GPIC_coord(sy),GPIC_coord(ex),GPIC_coord(ey));
  178.   } else { 
  179.     fprintf(outfile,"line from x+%f,y+%f to x+%f,y+%f\n",
  180.         GPIC_coord(sx),GPIC_coord(sy),GPIC_coord(ex),GPIC_coord(ey));
  181.   }
  182. }
  183.  
  184.  
  185. GPIC_put_text(x, y, str)
  186.     int x,y;                /* reference point of string */
  187.     char str[];            /* the text */
  188. {
  189.   GPIC_close_line();
  190.   fprintf(outfile, "\"%s\" ",str);
  191.   switch(GPIC_justify) {
  192.   case LEFT: {
  193.     fprintf(outfile,"ljust ");
  194.     break;
  195.   }
  196.   case CENTRE: {
  197.     fprintf(outfile," ");
  198.     break;
  199.   }
  200.   case RIGHT: {
  201.     fprintf(outfile,"rjust ");
  202.     break;
  203.   }
  204.   }
  205.   fprintf(outfile,"at x+%f,y+%f\n",GPIC_coord(x),GPIC_coord(y));
  206. }
  207.  
  208.  
  209.  
  210. int GPIC_justify_text(mode)
  211.     enum JUSTIFY mode;
  212. {
  213.   GPIC_justify = mode;
  214.   return (TRUE);
  215. }
  216.  
  217. int GPIC_text_angle(angle)
  218.     int angle;
  219. {
  220.   GPIC_close_line();
  221.   return (FALSE);
  222. }
  223.  
  224. GPIC_reset()
  225. {
  226.   fflush(outfile);
  227. }
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.